package com.itlong.cloud.property.service;

import com.itlong.cloud.POJO.DTO.property.PropertyCloudIntercomSaveDTO;
import com.itlong.cloud.POJO.PO.DeviceBusinessChangeLogPO;
import com.itlong.cloud.POJO.PO.DeviceBusinessEntranceChangeLogPO;
import com.itlong.cloud.POJO.VO.property.PropertyEquipUpdateVO;
import com.itlong.cloud.POJO.VO.property.PropertyGetElevatorNameAndDeviceUniqueVO;
import com.itlong.cloud.POJO.VO.property.PropertyGetFloorByDeviceUniqueVO;

import java.io.IOException;
import java.util.List;

/**
 * <desc>
 *      设备添加和更新Service
 * </desc>
 *
 * @createDate 2017/10/16
 */
public interface IPropertyAddEquipService {

    /**
     * <desc>
     *      获取电梯楼层对应表
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/27
     */
    List<PropertyGetFloorByDeviceUniqueVO> getFloorByDeviceUnique(String deviceUnique);

    /**
     * <desc>
     *      根据项目id获取云电梯列表
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/27
     */
    List<PropertyGetElevatorNameAndDeviceUniqueVO> getElevatorByProjectId(String projectId,String unitId,String floorNum);

    /**
     * <desc>
     *      添加单个设备及其归属信息
     * <desc/>
     * @param   propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    void insertEquip(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;


    /**
     * <desc>
     *      添加单个电梯及其归属信息
     * <desc/>
     * @param       propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    void addElevator(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;

    /**
     * <desc>
     *      添加单个门禁及其归属信息
     * <desc/>
     * @param       propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    void addEntrance(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;

    /**
     * <desc>
     *      添加单个云对讲及其归属信息
     * <desc/>
     * @param       propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    List<DeviceBusinessChangeLogPO> addCloudIntercom(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;



    /**
     * <desc>
     *      更新单个设备及其归属信息
     * <desc/>
     * @param   propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/26
     */
    void updateEquip(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;


    /**
     * <desc>
     *      更新单个门禁及其归属信息
     * <desc/>
     * @param       propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    List<DeviceBusinessEntranceChangeLogPO> updateEntrance(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;

    /**
     * <desc>
     *      添加单个云对讲及其归属信息
     * <desc/>
     * @param       propertyEquipSaveDTO    物业设备数据转换对象
     * @return
     * @author Biao.R
     * @createDate 2017/9/22
     */
    List<DeviceBusinessChangeLogPO> updateCloudIntercom(PropertyCloudIntercomSaveDTO propertyEquipSaveDTO) throws Exception;


    /**
     * <desc>
     *      向设备推送设备云对讲指令
     * <desc/>
     * @param   changeLogPOS     云对讲变更指令集合
     * @author Biao.R
     * @createDate 2017/12/1
     */
    void pushCloudIntercom(List<DeviceBusinessChangeLogPO> changeLogPOS) throws Exception;

    /**
     * <desc>
     *      运营启用项目云对讲时，同步云对讲Sip到服务器
     * <desc/>
     * @param
     * @return
     * @author Biao.R
     * @createDate 2018/1/26
     */
    void syncEquipSipWhenEnableCloud(String projectId);

    /**
     * <desc>
     *      处理设备旧数据的sip账号，为了便于灵云区分测试和正式sip故在测试环境设备账号前加184前缀
     * <desc/>
     *
     * @return 标准格式化响应结果
     * @author Juguang.S
     * @createDate 2018/12/28
     */
    void updateOldDeviceSipAccount() throws Exception;
}